import { BasicColumn } from '/@/components/Table';
import { FormSchema } from '/@/components/Table';
import { Icon } from '/@/components/Icon';
import { render } from '/@/utils/common/renderUtils';

import { h } from 'vue';
import { Input, Button } from 'ant-design-vue';
import { FolderOpenOutlined } from '@ant-design/icons-vue';
import { bindMapFormSchema } from '/@/utils/common/compUtils';
import { usePermission } from '/@/hooks/web/usePermission';
import { rules } from '/@/utils/helper/validator';

import { getDictItemsByCode } from '/@/utils/dict';
import { filterDictText } from '/@/utils/dict/JDictSelectUtil';
import { buildUUID } from '/@/utils/uuid';

usePermission();

function fieldIfShow({ field, model }) {
  switch (field) {
    case 'relationType':
    case 'tabOrderNum':
      return model.tableType === 3;
    case 'treeParentIdField':
    case 'treeIdField':
    case 'treeFieldname':
      return model.isTree === 'Y';
    case 'idSequence':
      return model.idType === 'SEQUENCE';
  }
  return true;
}

export const VALIDATE_FAILED = 'validate-failed';

export const columns: BasicColumn[] = [
  {
    title: '表类型',
    align: 'center',
    sorter: true,
    dataIndex: 'tableType',
    width: 140,
    customRender({ text, record }) {
      const tableTypeDictOptions = getDictItemsByCode('cgform_table_type');
      let tbTypeText = filterDictText(tableTypeDictOptions, text);
      if (record.isTree === 'Y') {
        tbTypeText += '(树)';
      }
      if (record.themeTemplate === 'innerTable') {
        tbTypeText += '(内嵌)';
      } else if (record.themeTemplate === 'erp') {
        tbTypeText += '(ERP)';
      } else if (record.themeTemplate === 'tab') {
        tbTypeText += '(TAB)';
      }
      return tbTypeText;
    },
  },
  {
    title: '表名',
    sorter: true,
    align: 'center',
    dataIndex: 'tableName',
    width: 240,
  },
  {
    title: '表描述',
    align: 'center',
    dataIndex: 'tableTxt',
    width: 220,
  },
  {
    title: '版本',
    align: 'center',
    dataIndex: 'tableVersion',
    width: 120,
  },
  {
    title: '同步状态',
    align: 'center',
    sorter: true,
    dataIndex: 'isDbSynch',
    width: 120,
    customRender({ text }) {
      const color = text == 'Y' ? 'limegreen' : text == 'N' ? 'red' : '';
      const txt = text == 'Y' ? '已同步' : text == 'N' ? '未同步' : '';
      return h(
        'span',
        {
          style: { color: color },
        },
        txt
      );
    },
  },
  {
    title: '创建时间',
    align: 'center',
    sorter: true,
    dataIndex: 'createTime',
    width: 240,
  },
];

export const searchFormSchema: FormSchema[] = [
  {
    label: '表名',
    field: 'tableName',
    component: 'JInput',
  },
  {
    label: '表类型',
    field: 'tableType_MultiString',
    component: 'JDictSelectTag',
    componentProps: {
      dictCode: 'cgform_table_type',
      mode: 'multiple',
    },
  },
  {
    label: '表描述',
    field: 'tableTxt',
    component: 'JInput',
  },
];

export const ExtConfigDefaultJson = {
  reportPrintShow: 0,
  reportPrintUrl: '',
  joinQuery: 0,
  modelFullscreen: 0,
  modalMinWidth: '',
  commentStatus: 0,
};

export function useInitialData() {
  const initialData = [
    {
      dbFieldName: 'id',
      dbFieldTxt: '主键',
      dbLength: 36,
      dbPointLength: 0,
      dbDefaultVal: '',
      dbType: 'string',
      dbIsKey: '1',
      dbIsNull: '0',
      isShowForm: '0',
      isShowList: '0',
      isReadOnly: '1',
      fieldShowType: 'text',
      fieldLength: '120',
      queryMode: 'single',
      dbIsSync: '1',
    },
    {
      dbFieldName: 'create_by',
      dbFieldTxt: '创建人',
      dbLength: 50,
      dbPointLength: 0,
      dbDefaultVal: '',
      dbType: 'string',
      dbIsKey: '0',
      dbIsNull: '1',
      isShowForm: '0',
      isShowList: '0',
      fieldShowType: 'text',
      fieldLength: '120',
      queryMode: 'single',
      dbIsSync: '1',
    },
    {
      dbFieldName: 'create_time',
      dbFieldTxt: '创建日期',
      dbLength: 0,
      dbPointLength: 0,
      dbDefaultVal: '',
      dbType: 'Datetime',
      dbIsKey: '0',
      dbIsNull: '1',
      isShowForm: '0',
      isShowList: '0',
      fieldShowType: 'datetime',
      fieldLength: '120',
      queryMode: 'single',
      dbIsSync: '1',
    },
    {
      dbFieldName: 'update_by',
      dbFieldTxt: '更新人',
      dbLength: 50,
      dbPointLength: 0,
      dbDefaultVal: '',
      dbType: 'string',
      dbIsKey: '0',
      dbIsNull: '1',
      isShowForm: '0',
      isShowList: '0',
      fieldShowType: 'text',
      fieldLength: '120',
      queryMode: 'single',
      dbIsSync: '1',
    },
    {
      dbFieldName: 'update_time',
      dbFieldTxt: '更新日期',
      dbLength: 0,
      dbPointLength: 0,
      dbDefaultVal: '',
      dbType: 'Datetime',
      dbIsKey: '0',
      dbIsNull: '1',
      isShowForm: '0',
      isShowList: '0',
      fieldShowType: 'datetime',
      fieldLength: '120',
      queryMode: 'single',
      dbIsSync: '1',
    },
    {
      dbFieldName: 'sys_org_code',
      dbFieldTxt: '所属部门',
      dbLength: 64,
      dbPointLength: 0,
      dbDefaultVal: '',
      dbType: 'string',
      dbIsKey: '0',
      dbIsNull: '1',
      isShowForm: '0',
      isShowList: '0',
      fieldShowType: 'text',
      fieldLength: '120',
      queryMode: 'single',
      dbIsSync: '1',
    },
  ];
  const tempIds = [];
  initialData.forEach((record) => {
    record['id'] = buildUUID();
    tempIds.push(record['id']);
  });
  return { initialData, tempIds };
}

export function useTreeNeedFields() {
  return [
    {
      dbFieldName: 'pid',
      dbFieldTxt: '父级节点',
      dbLength: 32,
      dbPointLength: 0,
      dbDefaultVal: '',
      dbType: 'string',
      dbIsKey: '0',
      dbIsNull: '1',
      isShowForm: '1',
      isShowList: '0',
      fieldShowType: 'text',
      fieldLength: '120',
      queryMode: 'single',
      dbIsSync: '1',
    },
    {
      dbFieldName: 'has_child',
      dbFieldTxt: '是否有子节点',
      dbLength: 3,
      dbPointLength: 0,
      dbDefaultVal: '',
      dbType: 'string',
      dbIsKey: '0',
      dbIsNull: '1',
      isShowForm: '0',
      isShowList: '0',
      fieldShowType: 'list',
      fieldLength: '120',
      queryMode: 'single',
      dictField: 'yn',
      dbIsSync: '1',
    },
  ];
}
export const onlineDefaultButton = [
  { code: 'add', title: '新增', status: 0 },
  { code: 'edit', title: '编辑', status: 0 },
  { code: 'delete', title: '删除', status: 0 },
  { code: 'export', title: '导出', status: 0 },
  { code: 'import', title: '导入', status: 0 },
  { code: 'query', title: '查询', status: 0 },
];

// export const formSchema: FormSchema[] = [
//   { label: '', field: 'id', component: 'Input', show: false },
//   { label: '', field: 'tableVersion', component: 'Input', show: false },
//   {
//     label: '表名',
//     field: 'tableName',
//     component: 'Input',
//     required: true,
//     dynamicDisabled: ({ model }) => model.tableVersion && model.tableVersion != 1,
//     dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('onl_cgform_head', 'table_name', model, schema, true),
//   },
//   {
//     label: '表描述',
//     field: 'tableTxt',
//     component: 'Input',
//     required: true,
//   },
//   {
//     label: '表类型',
//     field: 'tableType',
//     component: 'Select',
//     defaultValue: 1,
//     componentProps: {
//       options: [
//         { label: '单表', value: 1 },
//         { label: '主表', value: 2 },
//         { label: '附表', value: 3 },
//       ],
//       onChange: (e: any) => {
//         console.log(e);
//       },
//       //onChange: handlers.onTableTypeChange,
//     },
//   },
//   {
//     label: '',
//     field: 'relationType',
//     component: 'InputNumber',
//     render: () => '',
//     colProps: { xs: 0, sm: 17 },
//     ifShow: fieldIfShow,
//   },
//   {
//     label: '',
//     field: 'relationType',
//     component: 'RadioGroup',
//     defaultValue: 0,
//     componentProps: {
//       options: [
//         { label: '一对多', value: 0 },
//         { label: '一对一', value: 1 },
//       ],
//     },
//     colProps: { xs: 24, sm: 4 },
//     itemProps: {
//       colon: false,
//       labelCol: { xs: 0, sm: 0 },
//       wrapperCol: { xs: 24, sm: 24 },
//     },
//     ifShow: fieldIfShow,
//   },
//   {
//     label: '序号',
//     field: 'tabOrderNum',
//     component: 'InputNumber',
//     componentProps: {
//       style: {
//         width: '100%',
//       },
//     },
//     colProps: { xs: 24, sm: 3 },
//     itemProps: {
//       labelCol: { xs: 24, sm: 7 },
//       wrapperCol: { xs: 24, sm: 24 - 7 },
//     },
//     ifShow: fieldIfShow,
//   },
//   {
//     label: '表单分类',
//     field: 'formCategory',
//     component: 'JDictSelectTag',
//     defaultValue: 'temp',
//     componentProps: {
//       dictCode: 'ol_form_biz_type',
//     },
//   },
//   {
//     label: '主键策略',
//     field: 'idType',
//     component: 'Select',
//     defaultValue: 'UUID',
//     componentProps: {
//       options: [{ label: 'ID_WORKER(分布式自增)', value: 'UUID' }],
//     },
//   },
//   {
//     label: '序号名称',
//     field: 'idSequence',
//     component: 'Input',
//     componentProps: {},
//     ifShow: fieldIfShow,
//   },
//   {
//     label: '显示复选框',
//     field: 'isCheckbox',
//     component: 'Select',
//     defaultValue: 'Y',
//     componentProps: {
//       options: [
//         { label: '是', value: 'Y' },
//         { label: '否', value: 'N' },
//       ],
//     },
//   },
//   {
//     label: '主题模板',
//     field: 'themeTemplate',
//     component: 'Select',
//     defaultValue: 'normal',
//     componentProps: {
//       options: [{ label: '默认主题', value: 'normal' }],
//     },
//     dynamicDisabled: ({ model }) => model.tableType === 1,
//   },
//   {
//     label: '表单风格',
//     field: 'formTemplate',
//     component: 'Select',
//     defaultValue: '1',
//     componentProps: {
//       options: [
//         { label: '一列', value: '1' },
//         { label: '两列', value: '2' },
//         { label: '三列', value: '3' },
//         { label: '四列', value: '4' },
//       ],
//       placeholder: '请选择PC表单风格',
//     },
//   },
//   {
//     label: '移动表单风格',
//     field: 'formTemplateMobile',
//     component: 'Select',
//     defaultValue: '1',
//     componentProps: {
//       options: [
//         { label: 'AntDesign模板', value: '1' },
//         { label: 'Bootstrap模板', value: '2' },
//       ],
//       placeholder: '请选择移动表单风格',
//     },
//     ifShow: false,
//   },
//   {
//     label: '滚动条',
//     field: 'scroll',
//     component: 'Select',
//     defaultValue: 1,
//     componentProps: {
//       options: [
//         { label: '有', value: 1 },
//         { label: '无', value: 0 },
//       ],
//     },
//   },
//   {
//     label: '是否分页',
//     field: 'isPage',
//     component: 'Select',
//     defaultValue: 'Y',
//     componentProps: {
//       options: [
//         { label: '是', value: 'Y' },
//         { label: '否', value: 'N' },
//       ],
//     },
//   },
//   {
//     label: '是否树',
//     field: 'isTree',
//     component: 'Select',
//     defaultValue: 'N',
//     componentProps: {
//       options: [
//         { label: '是', value: 'Y' },
//         { label: '否', value: 'N' },
//       ],
//       onChange: (e: any) => {
//         console.log(e);
//       },
//       //onChange: handlers.onIsTreeChange,
//     },
//     dynamicRules({ model }) {
//       return [
//         {
//           validator({}, value) {
//             if (value === 'Y' && (model.tableType == 2 || model.tableType == 3)) {
//               return Promise.reject('主表和附表不支持树类型！');
//             }
//             return Promise.resolve();
//           },
//         },
//       ];
//     },
//   },
//   {
//     label: ' ',
//     field: 'extConfigJson',
//     component: 'Input',
//     slot: 'extConfigButton',
//     itemProps: { colon: false },
//   },
//   {
//     label: '树表单父ID',
//     field: 'treeParentIdField',
//     component: 'Input',
//     ifShow: fieldIfShow,
//   },
//   {
//     label: '是否有子节点字段',
//     field: 'treeIdField',
//     component: 'Input',
//     show: false,
//   },
//   {
//     label: '树开表单列',
//     field: 'treeFieldname',
//     required: true,
//     component: 'Input',
//     ifShow: fieldIfShow,
//   },
//   {
//     label: '附表',
//     field: 'subTableStr',
//     component: 'Input',
//     componentProps: {
//       disabled: true,
//       placeholder: ' ',
//       allowClear: false,
//     },
//     ifShow: ({ values }) => values.tableType === 2,
//   },
// ];
